﻿
namespace InsuranceAdjuster.Web.Models {
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Objects.DataClasses;
    using System.Linq;
    using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;


    // The MetadataTypeAttribute identifies AdjusterAppointmentMetadata as the class
    // that carries additional metadata for the AdjusterAppointment class.
    [MetadataTypeAttribute(typeof(AdjusterAppointment.AdjusterAppointmentMetadata))]
    public partial class AdjusterAppointment {

        // This class allows you to attach custom attributes to properties
        // of the AdjusterAppointment class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class AdjusterAppointmentMetadata {

            // Metadata classes are not meant to be instantiated.
            private AdjusterAppointmentMetadata() {
            }

            public Nullable<Guid> Adjuster_Id { get; set; }


            public Nullable<DateTime> AppointmentDateTime { get; set; }

            public string AppStateCode { get; set; }

            public string ApptAddressLine1 { get; set; }

            public string ApptAddressLine2 { get; set; }

            public string ApptCity { get; set; }

            public string ApptZip { get; set; }

            public BranchUser BranchUser { get; set; }
            [Include]
            public Claim Claim { get; set; }


            public DateTime Created { get; set; }

            public DateTime LastEdit { get; set; }

            public State State { get; set; }
            public String Dealership { get; set; }
            [RegularExpression(@"^([\(]{1}[0-9]{3}[\)]{1}[ ]{1}[0-9]{3}[\-]{1}[0-9]{4})$",
                ErrorMessageResourceName = "ValidationErrorPhone")]
            public String Phone { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies BranchOfficeMetadata as the class
    // that carries additional metadata for the BranchOffice class.
    [MetadataTypeAttribute(typeof(BranchOffice.BranchOfficeMetadata))]
    public partial class BranchOffice {

        // This class allows you to attach custom attributes to properties
        // of the BranchOffice class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class BranchOfficeMetadata {

            // Metadata classes are not meant to be instantiated.
            private BranchOfficeMetadata() {
            }
            [Required]
            public string Name { get; set; }
            [Required]
            public string AddressLine1 { get; set; }

            public string AddressLine2 { get; set; }

            public string Branch_Id { get; set; }
            [Include]
            public EntityCollection<BranchStyle> BranchStyles { get; set; }

            public EntityCollection<BranchUser> BranchUsers { get; set; }
            [Required]
            public string City { get; set; }

            public DateTime Created { get; set; }

            public DateTime LastEdit { get; set; }

            [RegularExpression(@"^([\(]{1}[0-9]{3}[\)]{1}[ ]{1}[0-9]{3}[\-]{1}[0-9]{4})$", 
                ErrorMessageResourceName="ValidationErrorPhone")]
            public string Phone { get; set; }

            public State State { get; set; }
            [Required]
            public string StateCode { get; set; }
            [StringLength(5, MinimumLength=5)]
            public string Zip { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies BranchStyleMetadata as the class
    // that carries additional metadata for the BranchStyle class.
    [MetadataTypeAttribute(typeof(BranchStyle.BranchStyleMetadata))]
    public partial class BranchStyle {

        // This class allows you to attach custom attributes to properties
        // of the BranchStyle class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class BranchStyleMetadata {

            // Metadata classes are not meant to be instantiated.
            private BranchStyleMetadata() {
            }

            public string Branch_Id { get; set; }

            public BranchOffice BranchOffice { get; set; }

            public DateTime Created { get; set; }

            public string Description { get; set; }

            public DateTime LastEdit { get; set; }

            public string Style { get; set; }

            public string Value { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies BranchUserMetadata as the class
    // that carries additional metadata for the BranchUser class.
    [MetadataTypeAttribute(typeof(BranchUser.BranchUserMetadata))]
    public partial class BranchUser {

        // This class allows you to attach custom attributes to properties
        // of the BranchUser class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class BranchUserMetadata {

            // Metadata classes are not meant to be instantiated.
            private BranchUserMetadata() {
            }

            public EntityCollection<AdjusterAppointment> AdjusterAppointments { get; set; }

            public string Branch_Id { get; set; }

            public BranchOffice BranchOffice { get; set; }

            public DateTime Created { get; set; }

            public DateTime LastEdit { get; set; }

            public Guid UserId { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies ClaimMetadata as the class
    // that carries additional metadata for the Claim class.
    [MetadataTypeAttribute(typeof(Claim.ClaimMetadata))]
    public partial class Claim {

        // This class allows you to attach custom attributes to properties
        // of the Claim class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class ClaimMetadata {

            // Metadata classes are not meant to be instantiated.
            private ClaimMetadata() {
            }

            public EntityCollection<AdjusterAppointment> AdjusterAppointments { get; set; }

            //public string Claim_Id { get; set; }

            public EntityCollection<ClaimDamage> ClaimDamages { get; set; }

            public Nullable<DateTime> ClaimDate { get; set; }

            public ClaimStatu ClaimStatu { get; set; }

            public Guid ClaimStatusGuid { get; set; }

            public DateTime Created { get; set; }

            [Required]
            public string CrossStreet { get; set; }

            [Required]
            public string DistanceFrom { get; set; }

            public string IncidentLocation { get; set; }
            [Required]
            public string InsuredAddressLine1 { get; set; }

            public string InsuredAddressLine2 { get; set; }
            [Required]
            public string InsuredCity { get; set; }

            [Required]
            public string InsuredColor { get; set; }

            public string InsuredDriversLicense { get; set; }

            [StringLength(20, MinimumLength=5)]
            public string InsuredFirstName { get; set; }

            public string InsuredLastName { get; set; }

            public string InsuredLicensePlate { get; set; }

            public string InsuredLicenseState { get; set; }

            [Required]
            public string InsuredMake { get; set; }

            [Required]
            public string InsuredModel { get; set; }

            //[RegularExpression(@"^([\(]{1}[0-9]{3}[\)]{1}[ ]{1}[0-9]{3}[\-]{1}[0-9]{4})$", ErrorMessage = "Invalid Phone Number")]
            public string InsuredPhone { get; set; }

            [Required]
            public string InsuredState { get; set; }
            
            //[RegularExpression(@"/\A[A-HJ-NPR-Z\d]{11}\d{6}\z/", ErrorMessage="Invalid VIN")]
            public string InsuredVIN { get; set; }

            public Nullable<int> InsuredYear { get; set; }

            [Required]
            public string InsuredZipCode { get; set; }

            public DateTime LastEdit { get; set; }

            public string PoliceReportNo { get; set; }

            public string Veh2AddressLine1 { get; set; }

            public string Veh2AddressLine2 { get; set; }

            public string Veh2City { get; set; }

            public string Veh2Color { get; set; }

            public string Veh2DriversLicense { get; set; }

            public string Veh2DriversLicenseState { get; set; }

            public string Veh2FirstName { get; set; }

            public string Veh2InsuranceCompany { get; set; }

            public string Veh2LastName { get; set; }

            public string Veh2LicensePlate { get; set; }

            public string Veh2LicenseState { get; set; }

            public string Veh2Make { get; set; }

            public string Veh2Model { get; set; }

            //[RegularExpression(@"^([\(]{1}[0-9]{3}[\)]{1}[ ]{1}[0-9]{3}[\-]{1}[0-9]{4})$", ErrorMessage = "ValidationErrorPhone")]
            public string Veh2Phone { get; set; }

            public string Veh2PolictyNumber { get; set; }

            public string Veh2State { get; set; }

            public string Veh2VIN { get; set; }

            public Nullable<int> Veh2Year { get; set; }

            public string Veh2ZipCode { get; set; }

            public string ClaimNumber { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies ClaimDamageMetadata as the class
    // that carries additional metadata for the ClaimDamage class.
    [MetadataTypeAttribute(typeof(ClaimDamage.ClaimDamageMetadata))]
    public partial class ClaimDamage {

        // This class allows you to attach custom attributes to properties
        // of the ClaimDamage class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class ClaimDamageMetadata {

            // Metadata classes are not meant to be instantiated.
            private ClaimDamageMetadata() {
            }

            public Claim Claim { get; set; }

            //public string Claim_Id { get; set; }

            public string CoordinateOnVehicle { get; set; }

            public DateTime Created { get; set; }

            //public string Damage_Id { get; set; }

            public string Description { get; set; }

            public byte[] Image { get; set; }

            public DateTime LastEdit { get; set; }

            public string LocationOnVehicle { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies ClaimStatuMetadata as the class
    // that carries additional metadata for the ClaimStatu class.
    [MetadataTypeAttribute(typeof(ClaimStatu.ClaimStatuMetadata))]
    public partial class ClaimStatu {

        // This class allows you to attach custom attributes to properties
        // of the ClaimStatu class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class ClaimStatuMetadata {

            // Metadata classes are not meant to be instantiated.
            private ClaimStatuMetadata() {
            }

            public EntityCollection<Claim> Claims { get; set; }

            public Guid ClaimStatusGuid { get; set; }

            public string ClaimStatus { get; set; }

            public DateTime Created { get; set; }

            public DateTime LastEdit { get; set; }

            public int SortOrder { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies NextTableIdMetadata as the class
    // that carries additional metadata for the NextTableId class.
    [MetadataTypeAttribute(typeof(NextTableId.NextTableIdMetadata))]
    public partial class NextTableId {

        // This class allows you to attach custom attributes to properties
        // of the NextTableId class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class NextTableIdMetadata {

            // Metadata classes are not meant to be instantiated.
            private NextTableIdMetadata() {
            }

            public string NextValue { get; set; }

            public string TableName { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies StandardVehicleImageMetadata as the class
    // that carries additional metadata for the StandardVehicleImage class.
    [MetadataTypeAttribute(typeof(StandardVehicleImage.StandardVehicleImageMetadata))]
    public partial class StandardVehicleImage {

        // This class allows you to attach custom attributes to properties
        // of the StandardVehicleImage class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class StandardVehicleImageMetadata {

            // Metadata classes are not meant to be instantiated.
            private StandardVehicleImageMetadata() {
            }

            public string BodyType_Id { get; set; }

            public DateTime Created { get; set; }

            //public byte[] Image { get; set; }

            public DateTime LastEdit { get; set; }

            public string Make { get; set; }

            public string Model { get; set; }

            public VehicleBodyType VehicleBodyType { get; set; }

            //public string VehicleImage_id { get; set; }

            public int Year { get; set; }
        }
    }

    public partial class VehicleReferencePhoto
    {
        internal sealed class VehicleReferencePhotoMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private VehicleReferencePhotoMetadata()
            {
            }

            public EntityCollection<StandardVehicleImage> StandardVehicleImages { get; set; }

            public byte[] PhotoData { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies StateMetadata as the class
    // that carries additional metadata for the State class.
    [MetadataTypeAttribute(typeof(State.StateMetadata))]
    public partial class State {

        // This class allows you to attach custom attributes to properties
        // of the State class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class StateMetadata {

            // Metadata classes are not meant to be instantiated.
            private StateMetadata() {
            }

            public EntityCollection<AdjusterAppointment> AdjusterAppointments { get; set; }

            public EntityCollection<BranchOffice> BranchOffices { get; set; }

            public DateTime Created { get; set; }

            public DateTime LastEdit { get; set; }

            public string StateName { get; set; }

            public string StateCode { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies VehicleBodyTypeMetadata as the class
    // that carries additional metadata for the VehicleBodyType class.
    [MetadataTypeAttribute(typeof(VehicleBodyType.VehicleBodyTypeMetadata))]
    public partial class VehicleBodyType {

        // This class allows you to attach custom attributes to properties
        // of the VehicleBodyType class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class VehicleBodyTypeMetadata {

            // Metadata classes are not meant to be instantiated.
            private VehicleBodyTypeMetadata() {
            }

            public string BodyType { get; set; }

            public string BodyType_Id { get; set; }

            public byte[] C3DModel { get; set; }

            public DateTime Created { get; set; }

            public DateTime LastEdit { get; set; }

            public EntityCollection<StandardVehicleImage> StandardVehicleImages { get; set; }
        }
    }
}
